package org.cuieney.videolife.di.module;
import android.content.Context;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.cuieney.videolife.common.okhttp.CacheInterceptor;
import org.cuieney.videolife.common.okhttp.CookiesManager;
import org.cuieney.videolife.common.utils.AppConfig;
import org.cuieney.videolife.di.HttpLoggingInterceptor;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import dagger.Module;
import dagger.Provides;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
@Module
public class RetrofitModule {
private final Context context;
public RetrofitModule(Context context) {
this.context = context;
}
@Provides
public Gson provideGson() {
return new GsonBuilder().
serializeNulls().
create();
}
@Provides
public OkHttpClient provideOkhttpClient(Cache cache, CacheInterceptor cacheInterceptor, CookiesManager cookiesManager) {
X509TrustManager xtm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] x509Certificates = new X509Certificate[0];
return x509Certificates;
}
};
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HostnameVerifier DO_NOT_VERIFY = (hostname, session) -> true;
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
return new OkHttpClient.Builder()
.cache(cache)//添加缓存
.addInterceptor(loggingInterceptor)
.addInterceptor(cacheInterceptor)
.sslSocketFactory(sslContext.getSocketFactory())
.hostnameVerifier(DO_NOT_VERIFY)
// .cookieJar(cookiesManager)
.build();
}
@Provides
public CacheInterceptor providesCacheInterceptor() {
return new CacheInterceptor(context);
}
@Provides
public Cache provideCache() {
return new Cache(context.getExternalFilesDir(AppConfig.DEFAULT_JOSN_CACHE), AppConfig.DEFAULT_CACHE_SIZE);
}
@Provides
public CookiesManager providesCookies() {
return new CookiesManager();
}
}